\documentclass[12pt,a4paper]{article}
\usepackage[dutch]{babel}	
\usepackage{graphicx}
\usepackage{fancyhdr}
\usepackage{xcolor}
\graphicspath{{images/}}
\usepackage[top=2cm, bottom=2cm]{geometry}
\usepackage{listings}

\author{Pleun Willemsen en  Walter Ebbers }
\title{Documentatie Database Implementaties \\ RDBMS }
\date{\today\\v1.0}

\lstset{tabsize=1,backgroundcolor=\color{gray!20},breaklines=true}
\begin{document}
\maketitle
\newpage
\tableofcontents
\newpage
\section*{Revisie geschiedenis}
\begin{tabular}{|p{2cm}|p{1cm}|p{6cm}|p{4cm}|}
\hline Datum & Versie & Omschrijving & Auteur \\ 
\hline 19-04-2012 & 0.1 & template gemaakt \& initi\"ele versie & Walter Ebbers \\ 
\hline 31-04-2012 & 0.2 & Stap 1 initi\"ele versie & Pleun Willemsen en Walter Ebbers \\ 
\hline 06-05-2012 & 0.3 & Stap 1 en 2 aangepast op feedback & Pleun Willemsen en Walter Ebbers \\ 
\hline 13-05-2012 & 0.4 & Stap 1 en 2 aangepast op feedback & Pleun Willemsen en Walter Ebbers \\ 
\hline 20-05-2012 & 0.5 & Stap 1 en 2 en 3 aangepast op feedback en de eerste initi\"ele versie van stap 4 en 5 toegevoegd & Pleun Willemsen en Walter Ebbers \\ 
\hline 27-05-2012 & 0.6 & Initi\"ele init methode voor stap 6 aangemaakt & Walter Ebbers \\ 
\hline 07-06-2012 & 0.6 & Stap 2 en 3 afbeelding bijgewerkt volgens implementatie en ddl uitgebreid & Walter Ebbers \\ 
\hline 10-06-2012 & 0.7 & Stap 6 uitgebreid en stap 9 toegelicht  & Pleun Willemsen \\ 
\hline 17-06-2012 & 0.8 & Stap 5 \& 8 de methoden aangepast en toegelicht + hoofdstuk testen toegelicht  & Walter Ebbers \\ 
\hline 22-06-2012 & 1.0 & Complete documenten aangevuld voor oplevering  & Walter Ebbers en Pleun Willemsen \\ 
\hline
\end{tabular} 

\section*{Begrippen}
\begin{tabular}{|p{4cm}|p{9cm}|}
\hline Begrip & Uitleg: \\ 
\hline DBI & Database implementaties \\ 
\hline DDL & Data Definition Language \\ 
\hline DML & Data Manipulation Language \\ 
\hline 
\end{tabular}  
\newpage

\section*{Inleiding}
Dit document is bedoelt ter verslaglegging van het doorlopen van de 11 stappen behorende tot het vak DBI.

\subsection{Opdracht}
Gevraagd wordt om een rdbms te bouwen volgens het volgende stappenplan:\\\\
\begin{enumerate}
\item Analyseer de structuur van een relationele database met behulp van bijvoor¬beeld NIAM en maak een strokenschema.
\item Implementeer de in 1. verkregen metadatabase als een hsqldb database, met bijvoorbeeld de naam myrdbms.
\item	Voer een BigBang uit, de eerste bootstrapfase, waarin de metadatabase gevuld wordt met informatie afkomstig uit de tabellen van de metadatabase.
\item Ontwerp en maak in-core datastructuren voor opslag van de metadatabase infor¬matie tijdens executie van je rdbms.
\item Definieëer een API voor je rdbms, dat wil zeggen, benoem een verzameling van DDL (Data Definition language) en DML (Data manipulation language) meth¬oden.
\item Maak methoden voor de tweede bootstrapfase, waarin informatie uit de metada¬tabase “met de hand” (hard-coded) naar binnen wordt gehaald.
\item Maak “utility” methoden voor binnenhalen resterende informatie uit de metada¬tabase.
\item Implementeer de DDL en DML.
\item Test de rdbms met een eenvoudige applicatie database
\item Voeg entiteits en referentiële integriteitschecking toe. Test de code met de data¬base uit 9.
\item Test de rdbms met je eigen rdbms, dat wil zeggen, voer als applicatie database myrdbms in.

\end{enumerate}
\newpage
\section{Stap 1}
\begin{lstlisting}
Stap 1: Analyseer de structuur van een relationele database met behulp van bijvoorbeeld NIAM en maak een strokenschema.
\end{lstlisting}

Hieronder staat een tabelstructuur diagram en bij stap 2 een strokenschema met een deel van de BigBang implementatie. Ons ontwerp ondersteund zowel Primary- , Foreign- als Alternative-Keys. Aan iedere tabel wordt een Constraint meegegeven. Deze constraint kan bestaan uit keys of referencies die op hun beurt weer bestaan uit attributegroepen.\\
\includegraphics[scale=0.65]{Database}

\newpage
\section{Stap 2}
\begin{lstlisting}
Stap 2: Implementeer de in 1. verkregen metadatabase als een hsqldb database.
\end{lstlisting}
FietsDB in het strokenschema:\\
\includegraphics[scale=0.7]{FietsDB}

\newpage
\section{Stap 3}
\begin{lstlisting}
Voer een BigBang uit, de eerste bootstrapfase, waarin de metadatabase gevuld wordt met informatie afkomstig uit de tabellen van de metadatabase.
\end{lstlisting}
Hieronder staat een deel van de BigBang.\\
\includegraphics[scale=0.65]{Stroken}\\
\newpage
\section{Stap 4}
\begin{lstlisting}
Ontwerp en maak in-core datastructuren voor opslag van de metadatabase informatie tijdens executie van je rdbms.

\end{lstlisting}
Voor de datastructuur is het onderstaande klassendiagram ontworpen. De klassen die ook bekend staan als beans representeren elk een tabel uit de rdbms.
\\
\includegraphics[scale=0.35]{classRdbms}\\
Vanwege de grootte van de klasses hebben we in de bovenstaande diagram alleen de meest belangrijke klassen getoont. Deze zijn de RDBMS klasse en de referencielecheck classe.
Voor het volledige classendiagram verwijzen we na de meegeleverde file "klassendiagramOpdr4.png".
\newpage
\section{Stap 5}
\begin{lstlisting}
Definieëer een API voor je rdbms, dat wil zeggen, benoem een verzameling van DDL (Data Definition language) en DML (Data manipulation language) meth¬oden.
\end{lstlisting}
De volgende DDL en DML methoden zijn ge\"implementeerd in onze code:
Data Definition Language:
\begin{itemize}
	\item createDatabase(String databasenaam);
	\item createTabel(String groupnaam, String tabelnaam, String databasenaam);
	\item useDatabase(String DBnaam);
	\item dropDatabase(String databasenaam);
	\item dropTable(String tabelnaam);
\end{itemize}
Data Manipulation Language:
\begin{itemize}
	\item select(String tabelnaam);
	\item select(String tabelnaam, String[] columnnamen);
	\item select(String tabelNaam, String[] columnnamen, String[] whereColumnName, Object[] whereValue);
	\item insert(String tblNaam, String[] columns, Object[] values);
	\item update(String tblNaam, String[] columnsToEdit, Object[] newValues, String[] whereColumnNames, Object[] whereValues);
	\item deleteRecord(String tabelNaam, String[] whereColumnName, Object[] whereValue);

\end{itemize}
Deze methoden zijn als gebruiker alleen beschikbaar vanuit de Rdbms.java klasse.

\newpage
\section{Stap 6}
\begin{lstlisting}
Maak methoden voor de tweede bootstrapfase, waarin informatie uit de metada¬tabase “met de hand” (hard-coded) naar binnen wordt gehaald.
\end{lstlisting}
Voor de init methode hebben we een databasemanager gemaakt en een Dao. De dao beschikt over een aantal ophaal methoden die de interne database structuur opbouwd. Dut gebeurt aan de hand van de volgende methoden:\\
\begin{itemize}
\item getDatabases();
	\subitem{-} Haalt de databases op die in de mysql database staan
\item getTablesByDatabase();
	\subitem{-} Haalt de tabellen op per database, en bouwt de tabelstructuur op
\item getAttributes();
	\subitem{-}	Haalt alle attributen van de tabellen op en zet deze in de juiste tabel
\item getConstraints();
	\subitem{-} Haalt alle constraints op en zet deze op de juiste plek
\item getReferences();
	\subitem{-} Haalt alle references op en zet deze op de juiste plek
\end{itemize}
Alle uitvoer van de bovenstaande methoden worden direct in de Rdbms gezet. Hierdoor heeft de Rdbms na initialisatie een opgebouwde database en tabellen structuur.\\
Door middel van de 2 dao methoden aan te roepen word de hashmap gevuld. In de bijlage staat een logfile met alle output. Hierin is goed te zien hoe de gehele structuur opgebouwd wordt.\\
Zie de bijgevoegde code voor de uitwerking. 
\newpage
\section{Stap 7}
\begin{lstlisting}
Maak “utility” methoden voor binnenhalen resterende informatie uit de metada¬tabase.
\end{lstlisting}
In ons project maken we gebruik van een aantal utility methoden. Hieronder hebben we de namen op een rijtje gezet met een kleine uitleg erbij.
\begin{enumerate}
\item createAttributeFromObject(Object[] attributesValues)
	\subitem{-} Doordat de gebruiker geen volledige attribute classe kan opgeven vanwege veiligheid gebruiken we deze methode voor het omzetten van een binnenkomende Object array naar een attribute toe.
\item getRecordsWithCertainValue(String[] whereColumnNames, Object[] whereValues)
	\subitem{-} Deze methode wordt in de klasse tabel gebruikt om records op te halen die aan de where voldoet. Deze functie wordt onder andere gebruikt in de select where methode en de update methode.
\item checkIfColumnsExist(String[] columns) 	
	\subitem{-} Deze methode wordt gebruikt om de binnenkomende columnnamen te controleren met de attributen van de tabel waarin de methode aangeroepen wordt.
\item checkRecordValues(int pkSize, Object[] values) 
	\subitem{-} Deze methode wordt gebruikt om te kijken of een record al bestaat in de database. De pkSize dient er voor om te controleren of er een true of false terug gegeven moet worden. 
\item checkValueType(Object[] values, String[] columns)
	\subitem{-} Deze methode wordt gebruikt om de binnengekomen typen te controleren. Deze moeten namelijk wel overeenkomen met de attributen van een tabel. (integriteitscheck)	
\item public boolean compare(java.lang.Object o1, java.lang.Object o2)
	\subitem{-} Deze methode roepen we aan als er objecten met elkaar vergeleken moeten worden(onder andere voor de integriteitscheck). Als er true uit komt betekend dit dat de classen gelijk zijn. 	
\end{enumerate}
\newpage
\section{Stap 8}
\begin{lstlisting}
Implementeer de DDL en DML.
\end{lstlisting}
Door het gebruik van boolean methoden kunnen we terug geven of een methode succesvol is. Dit wordt tijdens de testen dan ook gebruik aan de hand van verwachte waarden. Dit word verder uitgelegd in het Unit testen hoofdstuk. 
\subsection{Data Definition Language methoden uitleg}
\subsubsection{createDatabase}
De methode die aangeroepen wordt om een database aan te maken in de RDBMS. 
Dit gebeurt aan de hand van de volgende stuk code:
\begin{lstlisting}
	public boolean createDatabase(String dbNaam) {
		if (!myDatabases.containsKey(dbNaam)) {
			Database db = new Database(dbNaam);
			myDatabases.put(dbNaam, db);
			return true;
		} else
			return false;
	}
\end{lstlisting}
\subsubsection{createTabel}
Via deze methode wordt er een tabel aangemaakt in de database. Dit gebeurd aan de hand van de volgende stuk code:
\begin{lstlisting}
	public boolean createTable(String groupNaam, String tabelNaam, String databaseNaam) {

		if (!myGroups.containsKey(groupNaam)) {
			if (myDatabases.containsKey(databaseNaam)) {
				if (!myDatabases.get(databaseNaam).getTabellen().containsKey(tabelNaam)) {
					Group grp = new Group(groupNaam);
					myGroups.put(groupNaam, grp);
					myDatabases.get(databaseNaam).addSingleTabel(new Tabel(tabelNaam, grp));
					return true;
				} else {
					logger.info("Tabel " + tabelNaam + " bestaat al in database: " + databaseNaam);
					return false;
				}
			} else {
				logger.info("Database bestaat niet: " + databaseNaam);
				return false;
			}
		} else {
			logger.info("Group bestaat al: " + groupNaam);
			return false;
		}
	}
\end{lstlisting}
\subsubsection{useDatabase}
De useDatabase methode wordt gebruikt om een bestaande database als huidige database waarin gewerkt wordt. 
\begin{lstlisting}
	public boolean useDatabase(String dbNaam) {
		boolean useDatabase = false;
		if (myDatabases.containsKey(dbNaam)) {
			if (currentDatabase != null) {
				if (currentDatabase.getNaam().equals(dbNaam))
					useDatabase = false;
				else {
					myDatabases.remove(currentDatabase.getNaam());
					myDatabases.put(currentDatabase.getNaam(), currentDatabase);
					currentDatabase = myDatabases.get(dbNaam);
					useDatabase = true;
				}
			} else {
				currentDatabase = myDatabases.get(dbNaam);
				useDatabase = true;
			}
		} else {
			useDatabase = false;
		}
		return useDatabase;
	}
\end{lstlisting}
\subsubsection{dropDatabase}
De dropdatabase wordt gebruikt om een database weg te gooien die niet meer gebruikt wordt.
Hiervoor is de volgende code geschreven:
\begin{lstlisting}
    public boolean dropDatabase(String databaseNaam) {
	if (myDatabases.get(databaseNaam) != null) {
	    if (!currentDatabase.getNaam().equals(databaseNaam)) {
		myDatabases.remove(databaseNaam);
		logger.info("Database is verwijderd");
		return true;
	    } else {
		logger.info("Database is in gebruik");
		return false;
	    }
	} else {
	    logger.info("Database bestaat niet");
	    return false;
	}
    }
\end{lstlisting}
\subsubsection{dropTable}
Als een tabel niet meer gebruikt wordt of nodig is, kan deze met de dropTable verwijderd worden. Hiervoor dient de tabel dan wel losgekoppeld te zijn van alle andere tabellen waar deze aan gekoppeld is. Voor de dropTable is de volgende code geschreven:
\begin{lstlisting}
    public boolean dropTable(String tabelNaam) {
	if (dropCheckTable(tabelNaam)) {
	    return currentDatabase.dropTabel(tabelNaam);
	} else {
	    logger.info("Tabel " + tabelNaam + " mag niet verwijderd worden");
	    return false;
	}
    }
\end{lstlisting}
\newpage
\subsection{Data Manipulation Language methoden uitleg}
\subsubsection{select}
De select bestaat uit 3 versies.
\begin{itemize}
\item select all
\item select van bepaalde columnen
\item select met een where
\end{itemize}
De code van hieronder is van een select all functie. De code van de andere 2 versies zijn te vinden in de Rdbms class
Rdbms select maakt gebruik van een methode select in de classe Tabel.\\\\
Rdbms select:
\begin{lstlisting}
	public ArrayList<Object[]> select(String tblNaam) {
		if (currentDatabase.getTabellen().containsKey(tblNaam))
			return currentDatabase.getTabellen().get(tblNaam).selectAllRecords();
		else
			return null;
	}
\end{lstlisting}
Select functie in classe tabel:
\begin{lstlisting}
    public ArrayList<Object[]> selectAllRecords() {
	ArrayList<Object[]> foundElements = new ArrayList<Object[]>();
	String[] columnNames = new String[attributen.size()];
	int i = 0;
	for (Attribute a : attributen.values()) {
	    if (i != attributen.size()) {
		columnNames[i] = a.getNaam();
		i++;
	    }
	}

	foundElements.add(columnNames);
	System.out.println(records.size());
	for (Record r : records) {
	    foundElements.add(r.getRecordValues());
	}

	for (Object[] oa : foundElements)
	    System.out.println("values "+Arrays.toString(oa));
	return foundElements;
    }
\end{lstlisting}
\subsubsection{insert}
Aan de hand van een tabelnaam worden de gegevens in de juiste tabel opgeslagen.
\begin{lstlisting}
    public boolean insert(String tblNaam, String[] columns, Object[] values) {
	if (insertRecord(tblNaam, columns, values)) {
	    logger.info("Ik mag door:)");
	    if (currentDatabase.getTabellen().containsKey(tblNaam)) {
		return currentDatabase.getTabellen().get(tblNaam).addRecord(columns, values);
	    } else {
		logger.info("Tabel bestaat niet");
		return false;
	    }
	} else {
	    logger.info("volgens de refCheck mag je niet door");
	    return false;
	}

    }
\end{lstlisting}
\subsubsection{update})
Om een update uit te voeren zijn een aantal gegevens nodig:
\begin{itemize}
\item tabelnaam waar de record instaat
\item Columnnamen met bijbehorende waarden
\item Columnnamen met bijbehorende waarden van de record(s) die aangepast moet(en) worden.
\end{itemize}
De code hiervoor in de RDBMS is alsvolgt:
\begin{lstlisting}
    public boolean update(String tblNaam, String[] columnsToEdit, Object[] newValues, String[] whereColumnNames, Object[] whereValues) {
	if (refCheckUpdateRecord(tblNaam, columnsToEdit, newValues, whereColumnNames, whereValues))
	    if (currentDatabase.getTabellen().containsKey(tblNaam)) {
		return currentDatabase.getTabellen().get(tblNaam).updateRecord(columnsToEdit, newValues, whereColumnNames, whereValues);

	    } else
		return false;
	else
	    return false;

    }
\end{lstlisting}
\subsubsection{delete record}
De delete record verwijderd een record uit een tabel, mits deze niet verbonden is aan andere tabellen.
De volgende code is hier voor geschreven:
\begin{lstlisting}
    public boolean deleteRecord(String tabelNaam, String[] whereColumns, Object[] whereValues) {
	if (dropRecordCheck(tabelNaam, whereColumns, whereValues)) {
	    return true;
	} else {
	    return false;
	}
    }
\end{lstlisting}
\newpage
\section{Stap 9}
\begin{lstlisting}
Test de rdbms met een eenvoudige applicatie database
\end{lstlisting}
\subsection{Onze applicatie}
Zie voor deze stap de Junittest \textit{TestMyDatabasePleunEnWalter.java}

\includegraphics[scale=0.8]{stap11}

De onderstaande output is van de bovenstaande test die volledig werkt:
\begin{lstlisting}
22-06-2012 22:02:49	org.dbi.mysql.Rdbms	<init>	INFO	Rdbms Gestart
================================
22-06-2012 22:02:49	org.dbi.beans.Database	<init>	INFO	Database FietsDB aangemaakt
================================
22-06-2012 22:02:49	org.dbi.beans.Constraint	<init>	INFO	Constraint: cons1 aangemaakt.
================================
22-06-2012 22:02:49	org.dbi.beans.Tabel	<init>	INFO	Tabel: Track aangemaakt
================================
22-06-2012 22:02:49	org.dbi.beans.Database	addSingleTabel	INFO	Tabel: Track toegevoegd aan database: FietsDB
================================
22-06-2012 22:02:49	org.dbi.beans.Constraint	<init>	INFO	Constraint: cons2 aangemaakt.
================================
22-06-2012 22:02:49	org.dbi.beans.Tabel	<init>	INFO	Tabel: KnpTrack aangemaakt
================================
22-06-2012 22:02:49	org.dbi.beans.Database	addSingleTabel	INFO	Tabel: KnpTrack toegevoegd aan database: FietsDB
================================
22-06-2012 22:02:49	org.dbi.beans.Constraint	<init>	INFO	Constraint: cons3 aangemaakt.
================================
22-06-2012 22:02:49	org.dbi.beans.Tabel	<init>	INFO	Tabel: Knooppunt aangemaakt
================================
22-06-2012 22:02:49	org.dbi.beans.Database	addSingleTabel	INFO	Tabel: Knooppunt toegevoegd aan database: FietsDB
================================
22-06-2012 22:02:49	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: nummer is toegevoegd aan tabel: Track
================================
22-06-2012 22:02:49	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: Naam is toegevoegd aan tabel: Track
================================
22-06-2012 22:02:49	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: Rel-Date is toegevoegd aan tabel: Track
================================
22-06-2012 22:02:49	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: Track is toegevoegd aan tabel: KnpTrack
================================
22-06-2012 22:02:49	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: Long is toegevoegd aan tabel: KnpTrack
================================
22-06-2012 22:02:49	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: Lat is toegevoegd aan tabel: KnpTrack
================================
22-06-2012 22:02:49	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: Vlgnr is toegevoegd aan tabel: KnpTrack
================================
22-06-2012 22:02:49	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: Lat is toegevoegd aan tabel: Knooppunt
================================
22-06-2012 22:02:49	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: Long is toegevoegd aan tabel: Knooppunt
================================
22-06-2012 22:02:49	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: Nummer is toegevoegd aan tabel: Knooppunt
================================
22-06-2012 22:02:49	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: Type is toegevoegd aan tabel: Knooppunt
================================
22-06-2012 22:02:49	org.dbi.beans.Key	<init>	INFO	Key: PK1 aangemaakt
================================
22-06-2012 22:02:49	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G1 toegevoegd aan Key: PK1
================================
22-06-2012 22:02:49	org.dbi.beans.Constraint	addSingleKeys	INFO	Key: PK1 toegevoegd aan Constraint: cons1
================================
22-06-2012 22:02:49	org.dbi.mysql.Rdbms	createConstraint	INFO	2 - 3 - cons1 constraint is toegevoegd of aangepast.
================================
22-06-2012 22:02:49	org.dbi.beans.Key	<init>	INFO	Key: AK2 aangemaakt
================================
22-06-2012 22:02:49	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G2 toegevoegd aan Key: AK2
================================
22-06-2012 22:02:49	org.dbi.beans.Constraint	addSingleKeys	INFO	Key: AK2 toegevoegd aan Constraint: cons1
================================
22-06-2012 22:02:49	org.dbi.mysql.Rdbms	createConstraint	INFO	2 - 3 - cons1 constraint is toegevoegd of aangepast.
================================
22-06-2012 22:02:49	org.dbi.beans.Key	<init>	INFO	Key: PK2 aangemaakt
================================
22-06-2012 22:02:49	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G3 toegevoegd aan Key: PK2
================================
22-06-2012 22:02:49	org.dbi.beans.Constraint	addSingleKeys	INFO	Key: PK2 toegevoegd aan Constraint: cons2
================================
22-06-2012 22:02:49	org.dbi.mysql.Rdbms	createConstraint	INFO	2 - 3 - cons2 constraint is toegevoegd of aangepast.
================================
22-06-2012 22:02:49	org.dbi.beans.Key	<init>	INFO	Key: FK1 aangemaakt
================================
22-06-2012 22:02:49	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G4 toegevoegd aan Key: FK1
================================
22-06-2012 22:02:49	org.dbi.beans.Constraint	addSingleKeys	INFO	Key: FK1 toegevoegd aan Constraint: cons2
================================
22-06-2012 22:02:49	org.dbi.mysql.Rdbms	createConstraint	INFO	2 - 3 - cons2 constraint is toegevoegd of aangepast.
================================
22-06-2012 22:02:49	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G5 toegevoegd aan Key: PK2
================================
22-06-2012 22:02:49	org.dbi.mysql.Rdbms	createConstraint	INFO	2 - 3 - cons2 constraint is toegevoegd of aangepast.
================================
22-06-2012 22:02:49	org.dbi.beans.Key	<init>	INFO	Key: PK3 aangemaakt
================================
22-06-2012 22:02:49	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G6 toegevoegd aan Key: PK3
================================
22-06-2012 22:02:49	org.dbi.beans.Constraint	addSingleKeys	INFO	Key: PK3 toegevoegd aan Constraint: cons3
================================
22-06-2012 22:02:49	org.dbi.mysql.Rdbms	createConstraint	INFO	2 - 3 - cons3 constraint is toegevoegd of aangepast.
================================
22-06-2012 22:02:49	org.dbi.mysql.Rdbms	createReference	INFO	Vergelijk: Track en nummer
================================
22-06-2012 22:02:49	org.dbi.beans.Reference	<init>	INFO	Reference gemaakt metREF1 met fromGroup G4 en toGroup G1
================================
22-06-2012 22:02:49	org.dbi.beans.Constraint	addsingleReference	INFO	Reference: REF1 G4 toegevoegd aan Constraint: cons2
================================
22-06-2012 22:02:49	org.dbi.mysql.Rdbms	createReference	INFO	Vergelijk: Long en Long
================================
22-06-2012 22:02:49	org.dbi.mysql.Rdbms	createReference	INFO	Vergelijk: Lat en Lat
================================
22-06-2012 22:02:49	org.dbi.beans.Reference	<init>	INFO	Reference gemaakt metREF2 met fromGroup G5 en toGroup G6
================================
22-06-2012 22:02:49	org.dbi.beans.Constraint	addsingleReference	INFO	Reference: REF2 G5 toegevoegd aan Constraint: cons2
================================
22-06-2012 22:02:49	org.dbi.mysql.Rdbms	insert	INFO	Ik mag door:)
================================
22-06-2012 22:02:49	org.dbi.beans.Tabel	selectSpecificColumnWithWhere	INFO	[1]
================================
22-06-2012 22:02:49	org.dbi.mysql.referentieleCheck	refCheckInsertRecord	INFO	Record gevonden :). We gaan verder.
================================
22-06-2012 22:02:49	org.dbi.mysql.referentieleCheck	refCheckInsertRecord	INFO	Record mag niet worden toegevoegd, omdat record niet bestaat in Knooppunt
================================
22-06-2012 22:02:49	org.dbi.mysql.Rdbms	insert	INFO	volgens de refCheck mag je niet door
================================
22-06-2012 22:02:49	org.dbi.mysql.Rdbms	insert	INFO	Ik mag door:)
================================
22-06-2012 22:02:49	org.dbi.mysql.Rdbms	insert	INFO	Ik mag door:)
================================
22-06-2012 22:02:49	org.dbi.beans.Tabel	selectSpecificColumnWithWhere	INFO	[1]
================================
22-06-2012 22:02:49	org.dbi.mysql.referentieleCheck	refCheckInsertRecord	INFO	Record gevonden :). We gaan verder.
================================
22-06-2012 22:02:49	org.dbi.beans.Tabel	selectSpecificColumnWithWhere	INFO	[543, 34]
================================
22-06-2012 22:02:49	org.dbi.mysql.referentieleCheck	refCheckInsertRecord	INFO	Record gevonden :). We gaan verder.
================================
22-06-2012 22:02:49	org.dbi.mysql.Rdbms	insert	INFO	Ik mag door:)
================================
\end{lstlisting}
\newpage
\section{Stap 10}
\begin{lstlisting}
Voeg entiteits en referentiële integriteitschecking toe. Test de code met de data¬base uit 9.
\end{lstlisting}

\subsection{Pseudocode referentiële check bij een insert}
\begin{lstlisting}
checkInsert(Database, attributeGroepen, referencies, kolommen, waarden)
{
  Voor iedere reference in referencies
    Als 1 van mijn eigen attributeGroepen de reference.ToGroup() bevat
	//Doen we niks. Want iemand verwijst naar mij.

    Als 1 van mijn eigen attributeGroepen de reference.FromGroup() bevat
	//Moeten we oppassen wat we inserten want dat moet in de verwijzen naar iemand anders
	
	Eerst uitzoeken naar welke tabel ik verwijs, dit even onthouden.
	
	Maak een lijstje van kolommen voor de check of deze record ook bestaat bij de andere tabel
	Maak het lijstje met waarden die moeten overeenkomen adhv AttributeGroepen

	Voer de query uit -> Als het resultaat groter is dan 0
	  Dan mogen we verder met de integriteits check
	Anders
	  Moeten we helaas stoppen
}
\end{lstlisting}
\newpage
\subsection{Pseudocode referentiële check bij update}
Deze methode bestaat uit een public en private methode.
public pseudo:
\begin{lstlisting}
public boolean refCheckUpdateRecord(PrimaryKey pk, ForeignKey fk, ArrayList<Reference> myRefs, String[] columnsToEdit) {
	Arraylist van booleans maken(hierin komt de boolean uitkomst van de private methode)

	voor alle waardes uit de string[] columnsToEdit{
		roep de private methode aan met de pk,fk,referenties, en huidige columnnaam en zet de uitkomst in de boolean lijst
	}

	Als de boolean lijst een false heeft
		return false - er mag niet geupdate worden
	anders 
		return true - er mag geupdate worden
    }
\end{lstlisting}
private methode pseudo
\begin{lstlisting}
private boolean refCheckUpdateRecord(PrimaryKey pk, ForeignKey fk, ArrayList<Reference> myRefs, String s) {
Boolean canupdate = true;

voor alle referenties in myRefs{
		voor alle attributegroepen ag in mijn primarykey attributegroepen{
					voor alle attributen in ag.getAttributes.values{		
						als mijn attributenaam overeenkomt met s{	
							canupdate = false - ik mag niet updaten ben een primaire key
						}
					}
		}
	return canUpdate;
}
\end{lstlisting}
\subsection{Pseudocode referentiële check bij delete}
Pseudocode voor de delete is grotendeels hetzelfde als die van een insert, alleen word er hier niet gekeken of de waarde opgeslagen mag worden maar of deze verwijderd mag worden. 
\newpage
\section{Stap 11}
\begin{lstlisting}
Test de rdbms met je eigen rdbms, dat wil zeggen, voer als applicatie database myrdbms in.
\end{lstlisting}
Wij testen onze RDBMS met een Junit test project. Hierin wordt de init aangeroepen en wordt de in-core structuur aangemaakt. Ook zelf creeeren we in de testen databases met tabellen, keys, referensies en records.
\section{Testomgeving}
In ons project hebben we 4 test classes en die zijn als volgt:
\begin{itemize}
\item AllTests.java
	\subitem Dit is de master testsuite. Hierin worden alle overige 3 testcases aangeroepen om te draaien.
\item TestDDLRdbms.java
	\subitem Hierin worden de DDLs getest.
\item TestDMLRdbms.java
	\subitem Hierin worden de DML testen uitgevoerd die voornamelijk met de beans te maken hebben.
\item TestRdbms.java
	\subitem Hierin staan de testen die te maken hebben met de Rdbms.java classe.
\end{itemize}
Op de volgende pagina's staan van de testclasses een aantal plaatjes.\\\\
\includegraphics[scale=0.70]{test1}\\\\
\includegraphics[scale=0.75]{test2}\\\\
\section{Persoonlijke bevindingen}
\subsection{Bevindingen Pleun Willemsen}
Ik had het vak Dbi anders voorgesteld. Ik had verwacht om scripts te schrijven etc. Ik dacht eerst dat dit een eitje zou zijn. Al snel zaten er haken en ogen aan. Dit heeft ons bijna de kop gekost. Op het laatst hebben we toch nog alles zien te realiseren. Daar zijn we blij mee.

\subsection{Bevindingen Walter Ebbers}
Het vak had ik gekozen vanwege dat ik veel met databases deed. Ik werkte vaak met Mysql databases en Microsoft SQL databases. Door dit vak hoopte ik meer inzicht te krijgen op hoe databases op de achtergrond in elkaar steken. Dit vak heeft me duidelijk getoond dat het geen gebakken eitje is. Je hebt te maken met veel interne checks om er voor te zorgen dat alles wel goed gaat in de databases die gemaakt zullen worden. Tijdens het implementeren van de rdbms kwamen we toch op een aantal uitwerkingen uit wat net wat dingen misten en we naar een nieuwe implementatie moesten kijken. Gelukkig hebben we het uiteindelijk voor elkaar gekregen en ben ik ook wel blij dat het afgekomen is en het belangrijkste er ook in zit.
\section{Bronnen}
\begin{itemize}
	\item Lessen DBI
	\item MySQL voor statements uitleg
\end{itemize}

\newpage
\section{Bijlage}
\subsection{Output Console Initialisatie}
\begin{lstlisting}
22-06-2012 19:59:32	org.dbi.mysql.Rdbms	<init>	INFO	Rdbms Gestart
================================
22-06-2012 19:59:32	org.dbi.mysql.DatabaseManager	<init>	INFO	Bezig met verbinding te maken naar de database.
================================
22-06-2012 19:59:32	org.dbi.mysql.DatabaseManager	<init>	INFO	Bezig met opzetten van de database connectie
================================
22-06-2012 19:59:32	org.dbi.mysql.DatabaseManager	<init>	INFO	Connectie maken geslaagd.
================================
22-06-2012 19:59:32	org.dbi.mysql.DatabaseManager	<init>	INFO	Verbinding geslaagd.
================================
22-06-2012 19:59:32	org.dbi.beans.Database	<init>	INFO	Database WallyTestDB aangemaakt
================================
22-06-2012 19:59:32	org.dbi.beans.Constraint	<init>	INFO	Constraint: cons6 aangemaakt.
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	<init>	INFO	Tabel: tblAttribGroup aangemaakt
================================
22-06-2012 19:59:32	org.dbi.beans.Database	addSingleTabel	INFO	Tabel: tblAttribGroup toegevoegd aan database: WallyTestDB
================================
22-06-2012 19:59:32	org.dbi.beans.Constraint	<init>	INFO	Constraint: cons3 aangemaakt.
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	<init>	INFO	Tabel: tblAttribute aangemaakt
================================
22-06-2012 19:59:32	org.dbi.beans.Database	addSingleTabel	INFO	Tabel: tblAttribute toegevoegd aan database: WallyTestDB
================================
22-06-2012 19:59:32	org.dbi.beans.Constraint	<init>	INFO	Constraint: cons4 aangemaakt.
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	<init>	INFO	Tabel: tblConstraint aangemaakt
================================
22-06-2012 19:59:32	org.dbi.beans.Database	addSingleTabel	INFO	Tabel: tblConstraint toegevoegd aan database: WallyTestDB
================================
22-06-2012 19:59:32	org.dbi.beans.Constraint	<init>	INFO	Constraint: cons1 aangemaakt.
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	<init>	INFO	Tabel: tblDatabase aangemaakt
================================
22-06-2012 19:59:32	org.dbi.beans.Database	addSingleTabel	INFO	Tabel: tblDatabase toegevoegd aan database: WallyTestDB
================================
22-06-2012 19:59:32	org.dbi.beans.Constraint	<init>	INFO	Constraint: cons5 aangemaakt.
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	<init>	INFO	Tabel: tblReference aangemaakt
================================
22-06-2012 19:59:32	org.dbi.beans.Database	addSingleTabel	INFO	Tabel: tblReference toegevoegd aan database: WallyTestDB
================================
22-06-2012 19:59:32	org.dbi.beans.Constraint	<init>	INFO	Constraint: cons2 aangemaakt.
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	<init>	INFO	Tabel: tblTabel aangemaakt
================================
22-06-2012 19:59:32	org.dbi.beans.Database	addSingleTabel	INFO	Tabel: tblTabel toegevoegd aan database: WallyTestDB
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: Naam is toegevoegd aan tabel: tblDatabase
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: ColumnType is toegevoegd aan tabel: tblAttribute
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: Mandatory is toegevoegd aan tabel: tblAttribute
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: Naam is toegevoegd aan tabel: tblAttribute
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: tblDatabase is toegevoegd aan tabel: tblAttribute
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: tblTabel is toegevoegd aan tabel: tblAttribute
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: Naam is toegevoegd aan tabel: tblTabel
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: tblConstraint is toegevoegd aan tabel: tblTabel
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: tblDatabase is toegevoegd aan tabel: tblTabel
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: FromGroup is toegevoegd aan tabel: tblReference
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: Naam is toegevoegd aan tabel: tblReference
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: ToGroup is toegevoegd aan tabel: tblReference
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: Naam is toegevoegd aan tabel: tblConstraint
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: PK_FK_ALTKEY_REF is toegevoegd aan tabel: tblConstraint
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: tblGroup is toegevoegd aan tabel: tblConstraint
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: AttribNaam is toegevoegd aan tabel: tblAttribGroup
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: Naam is toegevoegd aan tabel: tblAttribGroup
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: tblDatabase is toegevoegd aan tabel: tblAttribGroup
================================
22-06-2012 19:59:32	org.dbi.beans.Tabel	addSingleAttribute	INFO	Attribute: tblTabel is toegevoegd aan tabel: tblAttribGroup
================================
22-06-2012 19:59:32	org.dbi.beans.Key	<init>	INFO	Key: PK1 aangemaakt
================================
22-06-2012 19:59:33	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G1 toegevoegd aan Key: PK1
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addSingleKeys	INFO	Key: PK1 toegevoegd aan Constraint: cons1
================================
22-06-2012 19:59:33	org.dbi.mysql.Rdbms	createConstraint	INFO	5 - 6 - cons1 constraint is toegevoegd of aangepast.
================================
22-06-2012 19:59:33	org.dbi.beans.Key	<init>	INFO	Key: PK4 aangemaakt
================================
22-06-2012 19:59:33	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G10 toegevoegd aan Key: PK4
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addSingleKeys	INFO	Key: PK4 toegevoegd aan Constraint: cons4
================================
22-06-2012 19:59:33	org.dbi.mysql.Rdbms	createConstraint	INFO	5 - 6 - cons4 constraint is toegevoegd of aangepast.
================================
22-06-2012 19:59:33	org.dbi.beans.Key	<init>	INFO	Key: FK1000 aangemaakt
================================
22-06-2012 19:59:33	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G1000 toegevoegd aan Key: FK1000
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addSingleKeys	INFO	Key: FK1000 toegevoegd aan Constraint: cons3
================================
22-06-2012 19:59:33	org.dbi.mysql.Rdbms	createConstraint	INFO	5 - 6 - cons3 constraint is toegevoegd of aangepast.
================================
22-06-2012 19:59:33	org.dbi.beans.Key	<init>	INFO	Key: PK5 aangemaakt
================================
22-06-2012 19:59:33	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G11 toegevoegd aan Key: PK5
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addSingleKeys	INFO	Key: PK5 toegevoegd aan Constraint: cons5
================================
22-06-2012 19:59:33	org.dbi.mysql.Rdbms	createConstraint	INFO	5 - 6 - cons5 constraint is toegevoegd of aangepast.
================================
22-06-2012 19:59:33	org.dbi.beans.Key	<init>	INFO	Key: FK4 aangemaakt
================================
22-06-2012 19:59:33	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G12 toegevoegd aan Key: FK4
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addSingleKeys	INFO	Key: FK4 toegevoegd aan Constraint: cons5
================================
22-06-2012 19:59:33	org.dbi.mysql.Rdbms	createConstraint	INFO	5 - 6 - cons5 constraint is toegevoegd of aangepast.
================================
22-06-2012 19:59:33	org.dbi.beans.Key	<init>	INFO	Key: FK5 aangemaakt
================================
22-06-2012 19:59:33	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G13 toegevoegd aan Key: FK5
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addSingleKeys	INFO	Key: FK5 toegevoegd aan Constraint: cons5
================================
22-06-2012 19:59:33	org.dbi.mysql.Rdbms	createConstraint	INFO	5 - 6 - cons5 constraint is toegevoegd of aangepast.
================================
22-06-2012 19:59:33	org.dbi.beans.Key	<init>	INFO	Key: PK6 aangemaakt
================================
22-06-2012 19:59:33	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G14 toegevoegd aan Key: PK6
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addSingleKeys	INFO	Key: PK6 toegevoegd aan Constraint: cons6
================================
22-06-2012 19:59:33	org.dbi.mysql.Rdbms	createConstraint	INFO	5 - 6 - cons6 constraint is toegevoegd of aangepast.
================================
22-06-2012 19:59:33	org.dbi.beans.Key	<init>	INFO	Key: FK6 aangemaakt
================================
22-06-2012 19:59:33	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G15 toegevoegd aan Key: FK6
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addSingleKeys	INFO	Key: FK6 toegevoegd aan Constraint: cons6
================================
22-06-2012 19:59:33	org.dbi.mysql.Rdbms	createConstraint	INFO	5 - 6 - cons6 constraint is toegevoegd of aangepast.
================================
22-06-2012 19:59:33	org.dbi.beans.Key	<init>	INFO	Key: FK7 aangemaakt
================================
22-06-2012 19:59:33	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G16 toegevoegd aan Key: FK7
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addSingleKeys	INFO	Key: FK7 toegevoegd aan Constraint: cons5
================================
22-06-2012 19:59:33	org.dbi.mysql.Rdbms	createConstraint	INFO	5 - 6 - cons5 constraint is toegevoegd of aangepast.
================================
22-06-2012 19:59:33	org.dbi.beans.Key	<init>	INFO	Key: PK2 aangemaakt
================================
22-06-2012 19:59:33	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G2 toegevoegd aan Key: PK2
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addSingleKeys	INFO	Key: PK2 toegevoegd aan Constraint: cons2
================================
22-06-2012 19:59:33	org.dbi.mysql.Rdbms	createConstraint	INFO	5 - 6 - cons2 constraint is toegevoegd of aangepast.
================================
22-06-2012 19:59:33	org.dbi.beans.Key	<init>	INFO	Key: FK1 aangemaakt
================================
22-06-2012 19:59:33	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G3 toegevoegd aan Key: FK1
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addSingleKeys	INFO	Key: FK1 toegevoegd aan Constraint: cons2
================================
22-06-2012 19:59:33	org.dbi.mysql.Rdbms	createConstraint	INFO	5 - 6 - cons2 constraint is toegevoegd of aangepast.
================================
22-06-2012 19:59:33	org.dbi.beans.Key	<init>	INFO	Key: AK1 aangemaakt
================================
22-06-2012 19:59:33	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G4 toegevoegd aan Key: AK1
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addSingleKeys	INFO	Key: AK1 toegevoegd aan Constraint: cons2
================================
22-06-2012 19:59:33	org.dbi.mysql.Rdbms	createConstraint	INFO	5 - 6 - cons2 constraint is toegevoegd of aangepast.
================================
22-06-2012 19:59:33	org.dbi.beans.Key	<init>	INFO	Key: PK3 aangemaakt
================================
22-06-2012 19:59:33	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G5 toegevoegd aan Key: PK3
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addSingleKeys	INFO	Key: PK3 toegevoegd aan Constraint: cons3
================================
22-06-2012 19:59:33	org.dbi.mysql.Rdbms	createConstraint	INFO	5 - 6 - cons3 constraint is toegevoegd of aangepast.
================================
22-06-2012 19:59:33	org.dbi.beans.Key	<init>	INFO	Key: FK2 aangemaakt
================================
22-06-2012 19:59:33	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G6 toegevoegd aan Key: FK2
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addSingleKeys	INFO	Key: FK2 toegevoegd aan Constraint: cons3
================================
22-06-2012 19:59:33	org.dbi.mysql.Rdbms	createConstraint	INFO	5 - 6 - cons3 constraint is toegevoegd of aangepast.
================================
22-06-2012 19:59:33	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G7 toegevoegd aan Key: PK4
================================
22-06-2012 19:59:33	org.dbi.mysql.Rdbms	createConstraint	INFO	5 - 6 - cons4 constraint is toegevoegd of aangepast.
================================
22-06-2012 19:59:33	org.dbi.beans.Key	<init>	INFO	Key: FK3 aangemaakt
================================
22-06-2012 19:59:33	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G8 toegevoegd aan Key: FK3
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addSingleKeys	INFO	Key: FK3 toegevoegd aan Constraint: cons4
================================
22-06-2012 19:59:33	org.dbi.mysql.Rdbms	createConstraint	INFO	5 - 6 - cons4 constraint is toegevoegd of aangepast.
================================
22-06-2012 19:59:33	org.dbi.beans.Key	addSingleAttributeGroup	INFO	AttributeGroup: G9 toegevoegd aan Key: PK4
================================
22-06-2012 19:59:33	org.dbi.mysql.Rdbms	createConstraint	INFO	5 - 6 - cons4 constraint is toegevoegd of aangepast.
================================
22-06-2012 19:59:33	org.dbi.beans.Reference	<init>	INFO	Reference gemaakt metREF1 met fromGroup G3 en toGroup G1
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addsingleReference	INFO	Reference: REF1 G3 toegevoegd aan Constraint: cons2
================================
22-06-2012 19:59:33	org.dbi.beans.Reference	<init>	INFO	Reference gemaakt metREF2 met fromGroup G6 en toGroup G2
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addsingleReference	INFO	Reference: REF2 G6 toegevoegd aan Constraint: cons3
================================
22-06-2012 19:59:33	org.dbi.beans.Reference	<init>	INFO	Reference gemaakt metREF3 met fromGroup G8 en toGroup G4
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addsingleReference	INFO	Reference: REF3 G8 toegevoegd aan Constraint: cons4
================================
22-06-2012 19:59:33	org.dbi.beans.Reference	<init>	INFO	Reference gemaakt metREF4 met fromGroup G16 en toGroup G9
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addsingleReference	INFO	Reference: REF4 G16 toegevoegd aan Constraint: cons5
================================
22-06-2012 19:59:33	org.dbi.beans.Reference	<init>	INFO	Reference gemaakt metREF5 met fromGroup G12 en toGroup G10
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addsingleReference	INFO	Reference: REF5 G12 toegevoegd aan Constraint: cons5
================================
22-06-2012 19:59:33	org.dbi.beans.Reference	<init>	INFO	Reference gemaakt metREF6 met fromGroup G13 en toGroup G10
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addsingleReference	INFO	Reference: REF6 G13 toegevoegd aan Constraint: cons5
================================
22-06-2012 19:59:33	org.dbi.beans.Reference	<init>	INFO	Reference gemaakt metREF7 met fromGroup G15 en toGroup G5
================================
22-06-2012 19:59:33	org.dbi.beans.Constraint	addsingleReference	INFO	Reference: REF7 G15 toegevoegd aan Constraint: cons6
\end{lstlisting}

\end{document}
